/*
  迷宫探险
  题目描述
    小明在一个迷宫中探险，这个迷宫由一个 N × M 的网格组成，部分区域有障碍物，部分区域是空地。
    小明需要找到一条从起点到终点的最短路径。
    迷宫的移动规则如下：
      a. 小明可以在迷宫中上下左右移动，每次移动一步。
      b. 如果移动的目标格子是障碍物（#），则无法通过。
    传送门规则如下：
      a. 迷宫中可能存在一些传送门，每个传送门由数字 1 到 9 表示。
      b. 每对传送门由相同的数字标识，例如两个 1 表示一对传送门。
      c. 当小明移动到传送门所在的格子时，可以选择是否使用传送门：
           如果选择使用传送门，将会被传送到与之配对的另一个传送门的位置，并且传送也算作移动的一步；
           如果不使用传送门，可以继续在当前格子附近上下左右移动。

    请你输出小明需要找到从起点 S 到终点 E 的最短路径长度。如果无法到达终点，则输出 -1。
  输入描述
    第一行输入两个整数 N 和 M，表示迷宫的行数和列数（1 ≤ N, M ≤ 100）。
    接下来 N 行，每行有 M 个字符，描述迷宫的布局：
      S 表示起点（唯一）。
      E 表示终点（唯一）。
      .表示空地。
      # 表示障碍物。
      1-9 表示传送门，每对传送门由相同的数字表示，例如, 两个 1 表示一对传送门。
  输出描述
    输出一个整数，表示从起点到终点的最短路径长度。如果无法到达终点，输出 -1。
  样例1
    输入
      5 5
      S.#.2
      .#.#.
      .#.E.
      2.#.#
      ..1.1
    输出
      7
  提示
    样例说明：小明可以从起点 S 走到传送门 2，然后从另一个 2 传送到终点 E，并且总共只需要 7 步。
    数据范围：
      对于 20% 的数据，无传送门
      对于 40% 的数据，传送门数量 <= 1
      对于 100% 的数据，N, M <= 100
*/